from rest_framework import serializers
from apps.user1.models import User


class UsersModelSerialzier(serializers.ModelSerializer):
    """
        ModelSerializer是模型类序列化器，和Serializer区别
        1、可以根据指定的模型类自动生成序列化器字段
        2、帮助实现了create业务逻辑和update业务逻辑
        3、帮助实现唯一值判断方法，只要在模型类中对字段指定了字段的唯一值选项参数（unique=True）则会自动进行判断
        除了这三点，其他使用形式都一样
    """


    class Meta:
        # 指定根据哪个模型类生成对应的序列化器字段
        model = User
        # 指定单独字段  元组中只有一个值是要逗号 元祖和列表两种形式都可以
        fields = ('id', 'username', 'mobile', 'email', 'password')
        # password字段只参与保存，不在返回给前端，增加write_only选项参数
        extra_kwargs = {
            'password': {
                'max_length': 20,
                'min_length': 8,
                'write_only': True
            },
        }


    # 重写create方法
    def create(self, validated_data):
        # 保存用户数据并对密码加密
        user = User.objects.create_user(**validated_data)
        return user


    # 第二种重写方法
    # def create(self, validated_data):
    #     # 保存业务 缺少密码加密  保存还是调用父类的保存，子类增加一个密码加密的业务
    #     # 父类的保存业务
    #     user = super().create(validated_data)
    #     # 密码加密
    #     user.set_password(validated_data['password'])
    #     user.save()
    #
    #     return user